ASP.NET Core-এ Dependency Injection (DI) একটি গুরুত্বপূর্ণ কনসেপ্ট, যা অ্যাপ্লিকেশনের ডিপেনডেন্সি ম্যানেজমেন্ট সহজ করে এবং কোডের পুনরায় ব্যবহারযোগ্যতা বাড়ায়। DI এর মাধ্যমে, আপনি বিভিন্ন সার্ভিস ক্লাসকে একসাথে সংযুক্ত করতে পারেন, যেগুলোর লাইফটাইম ম্যানেজ করা যায়। ASP.NET Core-এ তিনটি প্রধান সার্ভিস লাইফটাইম রয়েছে: Scoped, Transient, এবং Singleton। এগুলোর ব্যবহার অ্যাপ্লিকেশনের কাঠামো এবং পারফরম্যান্সের ওপর প্রভাব ফেলে।
Scoped লাইফটাইমে একটি সার্ভিস প্রতিটি HTTP রিকোয়েস্ট এর জন্য একবার তৈরি হয় এবং সেই রিকোয়েস্ট চলাকালীন সার্ভিসটি পুনরায় ব্যবহার করা হয়। এই লাইফটাইমটি সাধারণত ডেটাবেস সংযোগ বা অন্য কোনো রিকোয়েস্ট-বেসড সার্ভিসের জন্য ব্যবহার করা হয়।
Scoped সার্ভিস শুধুমাত্র একটি নির্দিষ্ট রিকোয়েস্টের মধ্যে জীবিত থাকে এবং যখন রিকোয়েস্ট শেষ হয়ে যায়, তখন এটি ধ্বংস হয়ে যায়। এটি সাধারণত Controller বা Middleware-এর মতো রিকোয়েস্ট ভিত্তিক সার্ভিসে ব্যবহৃত হয়।
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IMyService, MyService>();
}
এখানে, IMyService
ইন্টারফেসের একটি ইন্সট্যান্স প্রতিটি HTTP রিকোয়েস্টের জন্য নতুনভাবে তৈরি হবে এবং রিকোয়েস্টের জন্য ব্যবহৃত হবে।
Transient লাইফটাইমে একটি সার্ভিস প্রতিটি Dependency Injection কলের জন্য নতুনভাবে তৈরি হয়। প্রতিবার একটি নতুন ইন্সট্যান্স তৈরি হবে, এবং এটি যতবারই ডিপেনডেন্সি ইনজেক্ট করা হোক না কেন, প্রতিবারই এটি নতুন হবে।
Transient সার্ভিসটি সাধারণত ছোট, স্বতন্ত্র এবং পরিবর্তনযোগ্য ডেটা বা কর্মক্ষমতা পরিচালনা করে, যেমন লগিং সার্ভিস, ক্লায়েন্ট-কনফিগার করা সার্ভিস ইত্যাদি।
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IMyService, MyService>();
}
এখানে, IMyService
প্রতিবার সার্ভিস প্রয়োজন হলে, একেবারে নতুন একটি ইন্সট্যান্স তৈরি হবে। এটি সাধারণত সেই সার্ভিসে ব্যবহার হয়, যেগুলো একটি রিকোয়েস্টের মধ্যে একাধিকবার ব্যবহৃত হতে পারে।
Singleton লাইফটাইমে একটি সার্ভিস অ্যাপ্লিকেশন শুরু হওয়ার পর থেকে অ্যাপ্লিকেশন চলাকালীন পুরো সময় জুড়ে একবার তৈরি হয় এবং একটি একই ইন্সট্যান্স সকল জায়গায় ব্যবহৃত হয়। এটি সাধারণত সেই সার্ভিসে ব্যবহৃত হয় যেগুলো ডেটা শেয়ার করতে হয় বা দীর্ঘমেয়াদী সংযোগ রাখতে হয়।
Singleton সার্ভিসটি দীর্ঘস্থায়ী অবস্থায় থাকে এবং অ্যাপ্লিকেশন চলাকালীন একমাত্র ইন্সট্যান্স ব্যবহৃত হয়, যেমন কনফিগারেশন সার্ভিস, লগিং সার্ভিস বা এমন কোনো সার্ভিস যেটি খুব কম সময়ে বা কখনও নতুনভাবে তৈরি করা প্রয়োজন হয় না।
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IMyService, MyService>();
}
এখানে, IMyService
কেবল একবার তৈরি হবে এবং অ্যাপ্লিকেশন চলাকালীন পুরো সময় একক ইন্সট্যান্সের মাধ্যমে ব্যবহৃত হবে।
লাইফটাইম | সার্ভিসের অবস্থা | এক্সটেনশন | উপযুক্ত পরিস্থিতি |
---|---|---|---|
Scoped | রিকোয়েস্ট-ভিত্তিক | এক রিকোয়েস্টের মধ্যে একবার তৈরি হয় | রিকোয়েস্ট ভিত্তিক ডেটা যেমন ডাটাবেস কানেকশন, ইউজার সেশন |
Transient | একবার ব্যবহার হওয়া | প্রতিবার নতুনভাবে তৈরি হয় | ছোট, অস্থায়ী সার্ভিস যেমন ডেটা প্রসেসিং, ইউটিলিটি সার্ভিস |
Singleton | অ্যাপ্লিকেশন চলাকালীন একটিই | অ্যাপ্লিকেশন চলাকালীন একটাই ইন্সট্যান্স | কনফিগারেশন, লগিং, এবং এমন সার্ভিস যা একাধিক জায়গায় শেয়ার করা হয় |
ASP.NET Core এর Dependency Injection লাইফটাইম গুলি - Scoped, Transient, এবং Singleton - প্রতিটির নিজস্ব ব্যবহারের ক্ষেত্র রয়েছে। একটি সঠিক লাইফটাইম নির্বাচন করা আপনার অ্যাপ্লিকেশনের পারফরম্যান্স এবং কোডের সুসংগঠনকে শক্তিশালী করতে সহায়ক।
common.read_more